Multiple inheritance
5 תשובות
לא. אבל יש לך traits, שנוסף בגירסא 5.4 וintval כתב לפני כמה חודשים מאמר על הנושא :)
כתבת את המושג באנגלית, אני מניח שלא מזמן שמעת עליו, אז אשאל את השאלה באיזה מקרים אתה חושב שאתה תצטרך להוריש כמה קלאסים בפעם אחת?
היי, אפילו סי שארפ וג'וואה לא נותנים לך אפשרות להוריש כמה מחלקות בפעם אחת.
כן, לא ידעתי איך לומר את זה בעברית. :)
קרו לי כמה מקרים בעבר, אבל אני זוכר שבסוף איכשהו הסתדרתי... D:
אוקיי.
עריכה:
עד עכשיו לא ידעתי מה זה Traits (לא ידעתי שיש פה מדריך על זה). עכשיו אני מסודר. תודה. :-)
אז מה ההבדל בין trait למחלקה (חוץ ממתודות קסם וכדו')?
בהסבר קצת צולע, traits נועדו על מנת לכתוב מקבץ של מטודות "גלובאליות" שזה נועד בעצם למנוע שימוש חוזר בקוד או במילים אחרות, להפוך את המערכת שלך ליותר DRY.
לעומת מחלקות, אתה לא יכול ליצור instance חדש של trait.
בעיקרון כשאתה עושה שימוש בtraits אתה לא באמת מוריש את הטרייט הזה, אלא יותר "משכפל" לתוך המחלקה בה נעשה השימוש.
להסבר יותר מעמיק על הנושא ועל השימוש והמגבלות של traits אני מציע לך לקרוא ישר מהRFC:
https://wiki.php.net/rfc/horizontalreuse
או להסבר קצר מתוך הדוקו: http://www.php.net/manual/en/language.oop5.traits.php
ההבדל בין trait לבין מחלקה הוא מאוד פשוט:
קודם נצטרך להבין מתי אנחנו צריכים הורשה ומתי לא.
בהורשה נשתמש רק כאשר המחלקה היורשת היא בעצם סוג של מחלקת הבסיס, או מרחיבה את מחלקת הבסיס.
עכשיו ניקח מקרה שבו אנחנו רוצים ליצור מחלקת סינגלטון. מחלקה שכל מי שיירש אותה יהפוך אוטומטית לסינגלטון.
במה נשתמש - מחלקה או trait?
אנחנו לא נשתמש בהורשה (מחלקה) כי מחלקת הבסיס היא לא מסוג סינגלטון, היא לא מרחיבה את הסינגלטון.
לעומת זאת, אחת התכונות (traits) של המחלקה היא שהיא סינגלטון. ולכן נשתמש ב-trait (trait באנגלית = תכונה).